package com.lin.maker.meta;

import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.json.JSONUtil;
import lombok.Data;


@Data
public class MetaManager {

    //volatile 关键字确保多线程环境下得内存可见性
    // 比如线程a修改了meta得值，线程b可以立即看到，就不会修改，因为在线程a是需要现在本地修改meta得值，这个时候
    //如果不开这个volatile，线程b是看不见的。
    //synchronized 关键字确保多线程环境下得线程安全
    //双重检查锁模式，确保单例模式得线程安全
    private static volatile Meta meta;


    public static Meta getMeta() {
            if (meta == null) {
                synchronized (MetaManager.class) {
                    if (meta == null) {
                        meta = initMeta(meta);
                    }
                }
            }
            return meta;
    }
    public static Meta initMeta(Meta meta) {
        String metajson = ResourceUtil.readUtf8Str("meta.json");
//        String metajson = ResourceUtil.readUtf8Str("springboot-init-meta.json");
        Meta newMeta = JSONUtil.toBean(metajson, Meta.class);
        MetaValidtor.doValid(newMeta);
        return newMeta;
    }
}
